package jschool.manejadores;

import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;

import javax.swing.JOptionPane;

import jschool.entidades.Horario;
import jschool.persistencia.Conexion;

public class ManejadorDeHorario {
	private static ManejadorDeHorario instancia = null;
	private ArrayList<Horario> horarios = null;
	private Conexion conexion = null;
	private ResultSet rs = null;
	private PreparedStatement stmt = null;

	private ManejadorDeHorario() {
		conexion = Conexion.getInstancia();
	}

	public static ManejadorDeHorario getInstancia() {
		if (instancia == null) {
			instancia = new ManejadorDeHorario();
		}
		return instancia;
	}

	public ArrayList<Horario> getHorario() {
		horarios = new ArrayList<Horario>();
		try {
			String sql = "SELECT * FROM Horario";
			stmt = (PreparedStatement) conexion.hacerEnunciado(sql);
			rs = conexion.hacerConsulta(sql);
			while (rs.next()) {
				Horario horario = new Horario(rs.getInt(1), rs.getInt(2), rs
						.getString(3), rs.getString(4), rs.getString(5));
				horarios.add(horario);
			}
		} catch (SQLException e) {
			e.printStackTrace();
			JOptionPane.showMessageDialog(null, "Error Listando Horarios",
					"Error", JOptionPane.ERROR_MESSAGE);
			return null;
		}
		return horarios;
	}

	public int agregarHorario(Horario horario) {
		int fila = 0;
		try {
			String sql = "INSERT INTO Horario (idCurso, idMateria, dias, hora, descripcion)"
					+ " VALUES(?,?,?,?,?)";
			stmt = (PreparedStatement) conexion.hacerEnunciado(sql);
			stmt.setInt(1, horario.getIdCurso());
			stmt.setInt(2, horario.getIdMateria());
			stmt.setString(3, horario.getDias());
			stmt.setString(4, horario.getHora());
			stmt.setString(5, horario.getDescripcion());
			fila = stmt.executeUpdate();
		} catch (SQLException e) {
			e.printStackTrace();
			JOptionPane.showMessageDialog(null, "Error Agregando Horario",
					"Error", JOptionPane.ERROR_MESSAGE);
			return 0;
		} finally {
			try {
				stmt.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
		return fila;
	}

	public int modificarHorario(Horario horario, int idCurso, int idMateria) {
		int fila = 0;
		try {
			String sql = "UPDATE Horario SET idCurso = ?, idMateria = ?, "
					+ "dias = ?, hora = ?, descripcion = ? WHERE (idCurso = ? "
					+ "AND idMateria = ?)";
			stmt = (PreparedStatement) conexion.hacerEnunciado(sql);
			stmt.setInt(1, horario.getIdCurso());
			stmt.setInt(2, horario.getIdMateria());
			stmt.setString(3, horario.getDias());
			stmt.setString(4, horario.getHora());
			stmt.setString(5, horario.getDescripcion());
			stmt.setInt(6, idCurso);
			stmt.setInt(7, idMateria);
			fila = stmt.executeUpdate();
		} catch (SQLException e) {
			e.printStackTrace();
			JOptionPane.showMessageDialog(null, "Error Modificando Horario",
					"Error", JOptionPane.ERROR_MESSAGE);
			return 0;
		} finally {
			try {
				stmt.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
		return fila;
	}
	
	public int eliminarHorario(int idCurso, int idMateria){
		int fila = 0;
		try{
			String sql = "DELETE FROM Horario WHERE WHERE (idCurso = ? "
					+ "AND idMateria = ?)";
			stmt = (PreparedStatement)conexion.hacerEnunciado(sql);
			stmt.setInt(1, idCurso);
			stmt.setInt(2, idMateria);
		}catch(SQLException e){
			e.printStackTrace();
			JOptionPane.showMessageDialog(null, "Error Eliminando Horario",
					"Error", JOptionPane.ERROR_MESSAGE);
			return 0;
		} finally {
			try {
				stmt.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
		return fila;
	}}
